1. Field of the Invention
The present invention relates generally to computer programs and their associated run-time environments, and in preferred embodiments, to a computer-implemented method, apparatus, and article of manufacture for a runtime solution to the Year 2000 problem.
2. Description of the Related Art
Computer systems used in various processing applications, such as, for example, processing insurance information, account information, inventory information, investment information, retirement information, as well as many other applications, often operate with records and data containing date-dependent information. In many computing systems, date information relating to years has typically been represented in two-digit year formats, where two digits represent a year between 1900 and 1999. Thus, for example, the two digits "97" would represent the year 1997. Popular usage of this simplified date information format throughout the computer industry has resulted in an industry-recognized problem, often referred to as "the Year 2000 problem," (or the "Y2K Problems).
More specifically, as a result of this simplification of date information, upon the turn of the century (i.e., upon the year 2000), two-digit year information intended to represent a year within the 21st century will, instead, be indistinguishable by computer systems from a year within the 20th century (i.e., between 1900 and 1999). Thus, for example, a two-digit year value of "08" which is intended to represent the year 2008 will be indistinguishable from the year 1908 by such computer systems.
More specifically, Year 2000 problems occur when calculations and comparisons cross the year 2000 boundary. For example, calculating two years beyond the year 1999 (represented as "99") yields an arithmetically correct result of 101, but the computer system may truncate this to 01, since only two digits are allowed. As a further example, the comparison of the year 1999 (represented as "99") against 2000 (represented as "00") may yield the result that a date in the year 1999 is "after" (arithmetically greater) than the year 2000.
Various solutions to the "Year 2000 problem" have been suggested. However, previously proposed manners of implementing such solutions have generally required source code changes. The solutions not requiring source code changes were generally incompatible with source code remediated applications.
For example, three widely recognized techniques to address the year 2000 problem are: expansion, windowing, and compression. The expansion technique, in general, involves a conversion of 2-digit years to 4-digit years. This solves the problem of ambiguity. However, because the size of the field is larger after expansion, prior proposals to implement this technique have required modifications to application logic, data files, and databases, etc. (including backup copies). In addition, processing routines involving date information would have to be rewritten to accommodate four-digit year data. The costs and conversion time associated with such modifications can eliminate this as a practical option.
According to the windowing technique, a 2-digit year field is interpreted as a year within a 100 year window of time. In the past, the year values, ranging from 0 to 99, were interpreted within the 100 year window of 1900 to 1999. The windowing technique simply allows the programmer to specify a window with a set of values different than from 1900 to 1999, for example, from 1960 to 2059. In the simple form of this technique, a single window is used for all windowed items in the executable module. For example, a "pivot point" is defined and all two digit year dates at or below this pivot point are assumed to be in the twenty-first century, while all other dates are assumed to be in the twentieth century.
In addition to this "single" window technique, multiple windows may be supported by allowing different window values to be defined for each program variable in the source module. For example, values representing birth dates ranging from 1920 to the present may coexist in a module with values representing retirement dates ranging from 1960 to 2059. Multiple windows provide a significant additional capability in terms of flexibility and power.
However, prior windowing proposals required changes to program logic (typically in source programs) which, in the past, was accomplished by modifying each instance in a source code in which date information is used. Tools, such as Vantage YR2000.TM. from Millennium Dynamics, FIELDEX.TM. from STA America and 2000-Resolve.TM. from Micro Focus, have been developed to help analyze and modify source code statements. However, such source code modifications tend to increase the complexity of the source code, make debugging operations more difficult and, in some cases, increase the propensity for errors. The Millennium Language Extensions ("MLE") technology (as described in co-pending application Ser. No. 08/899,444, which is incorporated herein by reference) generally avoids logic changes, but still requires data division changes.
According to compression techniques, values greater than 99 are stored in the same space previously used to store two-digit year values. One previous manner proposed for implementing this function involved changing the datatype, for example, from character to binary, thus allowing values as large as 32,767 in the same two-byte field. However, such prior proposals require changing all recorded data to the new datatype, as well as changing program data declarations and, in some cases, program logic. Procedures for effecting such changes can be relatively complex, time consuming and error prone.
Therefore, although techniques have been developed for addressing the Year 2000 problem, there is still a need in the art for a method which allows the problem to be addressed in an economical and practical manner without requiring source code changes or requiring the availability of source and/or compilation/assembly listings.